package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"network_study3/src/server"
	"network_study3/src/server/moudle"
)

func main() {
	fmt.Println("http 客户端启动...")

	//login()

	//register()

	cancel()

	fmt.Println("==========================================")

	userAll()
}

// GET请求
func login() {
	// url.Parse 来处理请求参数
	u, err := url.Parse("http://127.0.0.1:60000/login")
	if err != nil {
		fmt.Println("创建请求连接失败：", err)
	}

	// 定义请求参数
	query := u.Query()
	query.Add("userName", "lisi")
	query.Add("passWord", "123456")
	u.RawQuery = query.Encode()

	fmt.Println("请求参数：", u.String())

	// 发起请求
	resp, err := http.Get(u.String())
	if err != nil {
		fmt.Println("请求失败：", err)
		return
	}
	defer resp.Body.Close()

	// 解析响应内容
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("解析响应数据失败：", err)
		return
	}

	fmt.Println("响应内容：", string(body))

	var res server.Result
	if err := json.Unmarshal(body, &res); err != nil {
		fmt.Println("json转换响应体失败：", err)
		return
	}
	fmt.Println("json转响应体：", res)
	strjson, err := json.Marshal(res)
	if err != nil {
		fmt.Println("json转换失败：", err)
		return
	}
	fmt.Println("json转字符串：", string(strjson))
}

// GET
func userAll() {
	resp, err := http.Get("http://127.0.0.1:60000/userAll")
	if err != nil {
		fmt.Println("请求失败：", err)
		return
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("解析响应数据失败：", err)
		return
	}

	fmt.Println("响应内容：", string(body))

	var res server.Result
	if err := json.Unmarshal(body, &res); err != nil {
		fmt.Println("json转换响应体失败：", err)
		return
	}

	fmt.Printf("%T, %v \n", res.Data, res.Data)
	for _, v := range res.Data.([]interface{}) {
		fmt.Printf("%T, %v \n", v, v)

	}

}

// POST
func register() {

	user := moudle.SysUser{
		Name:     "kaluo",
		Sex:      true,
		UserName: "kaluo",
		Phone:    "13602315201",
		Email:    "13602315201@qq.com",
	}
	strjson, err := json.Marshal(user)
	if err != nil {
		fmt.Println("结构体转换json失败：", err)
		return
	}

	resp, err := http.Post("http://127.0.0.1:60000/register", "application/json; charset=utf-8", bytes.NewBuffer(strjson))
	if err != nil {
		fmt.Println("请求失败：", err)
		return
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("解析响应数据失败：", err)
		return
	}

	fmt.Println("响应内容：", string(body))
}

// GET
func cancel() {
	resp, err := http.Get("http://127.0.0.1:60000/cancel?id=2")
	if err != nil {
		fmt.Println("请求失败：", err)
		return
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("解析响应数据失败：", err)
		return
	}

	fmt.Println("响应内容：", string(body))
}
